<?php
namespace Pinenut\Model;

class Updater extends Finder {

	
	public $set = array();
	
	public $inc = array();
	
	public $addToSet = array(); // массив комманд добавления в множество, 
								// если такой точно записи во множестве еще не существует
								// для sql - сами множества придётся хранить во внешних, 
								// по отношению к сущности, таблицах, что вполне логично, 
								// особенно если вспомнить как хранятся отношения многие к многим 
								// в традиционных релационных базах
	

	
	
	/**
	 * Добавляем записи во множество
	 * 
	 * @param string $field имя поля множества 
	 * @param mixed $value запись множества
	 * @return \Pinenut\Model\Updater
	 */
	function addToSet($field, $value) {
		$field = $this->prepareField($field);
		$this->addToSet[$field][] = $value;
		
		return $this;
	}
	
	
	/**
	 * @param string $field
	 * @param int $value
	 * @return \Pinenut\Model\Updater
	 */
	function inc($field, $value) {
		$field = $this->prepareField($field, true);
		$this->inc[$field] = intval($value);
	
		return $this;
	}
	
	/**
	 * @param string $field
	 * @param int $value
	 * @return \Pinenut\Model\Updater
	 */
	function set($field, $value) {
		$field = $this->prepareField($field, true);
		$this->set[$field] = $value;
	
		return $this;
	}
	
	function execute() {		
		$class = $this->class;
		$class::update($this->where, array(
			'set'      => $this->set, 
			'inc'      => $this->inc, 
			'addToSet' => $this->addToSet
		));
	}
}